"**_NOTE_**:" are changes to be aware of.
The language
- mruby now supports
private and protected visibility (b0db0bd)
- Maximum length of inlined symbols reduced from 5 to 4 characters to provide space for visibility flags (6442a01)
- Many methods are made private according to CRuby visibility (4a0e806)
- Generate OP_SSEND for
self.method type calls (111fe4b)
initialize method will be always private (eb8b412)
- Add new hooks
method_removed, method_undefined (9c74f6e)
- Add new hooks
singleton_method_removed, singleton_method_undefined (0863c08)
- Updated
OP_DEF output from codedump (3a3e877)
- Better handling of binary strings, e.g. String#b (b0127f0)
- Hash
to_s format has changed (baeeb5e)
- Some encoding related method such as
#force_encoding (e47b4ca), #b (b0127f0)
- Constant folding for
String#+ (6687bdd)
- Remove Float bit-operation (db8368f)
- use SWAR technique for strlen performance (cbb31e6)
- use merge sort for
Array#sort (5bd63d6)
Changes in C API
- pool.c renamed to mempool.c (and mrb_pool to mrb_mempool) (49525fa)
- mrb_pool_value renamed to mrb_irep_pool to reduce confusion (62ef5db)
- rename BOXNIX_SET_VALUE to BOXNO_SET_VALUE (#6397)
MRB_FROZEN_P() is replaced by mrb_frozen_p() (c11d18e)
- rename
color to gc_color (0e79f6b, 1e36d76)
- add
obj->frozen instead of flags MRB_SET_FROZEN_FLAG/MRB_UNSET_FROZEN_FLAG (8276143)
Build & Configuration
- New Build Target:
test:run:serial, test:run:serial:lib, test:run:serial:bin (#6423)
- New Platform: PlayStation Portable (#6022)
- New Platform: emscripten (#6487)
- New Config: no-float (with MRB_NO_FLOAT) (32200f1)
Changes in mrbgems
- mruby-print: removed; if you do not use
mruby-io, mruby use #print etc. in the core (8c8bbd9)
- mruby-enum-lazy: Add Enumerable::Lazy#grep_v to mruby-enum-lazy (#6171)
- mruby-io: Add
level argument to File.dirname (#6463)
- mruby-io: File.absolute_path? (#6482)
- mruby-io: File.absolute_path (96113a2)
- mruby-toplevel-ext: top-level public/private/protected moved to the core (2a876d2)
- mruby-metaprog: method list methods now works according to the visibility (9229da1)
- mruby-metaprog:
public_instance_methods, private_instance_methods, protected_instance_methods (9e3e7b2)
- mruby-encoding: MRB_UTF8_STRING turned on automatically with this gem (74bdae9)
Fixed GitHub Issues
- #6173 Fails to build with tcc(Tiny C Compiler)
- #6156 '/LIBPATH' issue
- #6183 ".e".to_f returns NAN
- #6182 mrb_read_float() converts "0.3" with a small error compared to strtod()
- #6210 Unary minus seems broken
- #6255 Wrong number of characters in broken UTF-8 string
- #4038 Heap buffer overflow in OP_ENTER
- #6262 Unable to define == for objects when using Array#delete
- #6267 When MRB_UTF8_STRING is enabled, giving byte characters for String#index and String#split gives wrong results
- #6277 MSVC: can't use malloc() in string.c with WIN32_LEAN_AND_MEAN
- #6240 Differentiate between lib and lib64 in the build settings.
- #6304 Calling method_missing with only Kwargs passes arguments incorrectly
- #6317 mrb_gc_register() may cause GC and collect the object being protected
- #6307 Planned change patch for mrb_vm_exec()
- #6298 foo :bar {} is legal in mruby?
- #6326 Detect “Use-after-free” with address sanitizer
- #5358 static warning from getpwnam
- #6339 mrb_ary_delete() may refer to an invalid address (use-after-free)
- #6346 Block kwargs are passed as last positional arg when using yield
- #6365 powl() not available when compiling for Dreamcast
- #6369 100x Performance Regression from 3.1
- #6270 NODE_ZSUPER from deeply nested blocks will result in a truncated digits for block index in OP_ARGARY
- #6297 Assigning to a block variable changes the actual block (thus affecting block_given? and yield)
- #6389 instance_exec named block args don't work properly
- #6388 Recent commit broke my windows build
- #6411 Wrong function unwinding when using return in a block
- #6439 OP_JMPUW does not call the ensure block when it jumps to the beginning of the begin block
- #6441 break inside while loop will execute the ensure block outside of the while loop
- #6453 Bigint: incorrect behavior of ^ operator
- #6452 Bigint: weird mod behavior
- #6451 Bigint: incorrect division behavior
- #6456 bigint: bug with division of a small number by a bigint
- #6466 mruby-bin-mruby using Kernel#p and Kernel#print in bintest fails test
- #6467 Heap-Use-After-Free due to Recursive group_by Calls
- #6471 Discrepancy in codegen for binary operations between master branch and 3.3.0
- #6477 heap-buffer-overflow in mrb_vm_exec
- #6485 Hash#rehash does not check if the hash is frozen
- #6483 Hash#default_proc= accepts arbitrary objects that are not callable
- #6491 Destroy existing string literals when composing string literals
Merged Pull Requests (User Visible Ones)
- #6171 Add Enumerable::Lazy#grep_v to mruby-enum-lazy
- #6174 Fix MRUBY_PACKAGE_DIR in mruby-config.bat
- #6175 Corrected strange conditional in mrb_vm_run()
- #6176 Stop assuming alias proc in CI_PROC_SET()
- #6177 gha: add macOS 14 to the build
- #6184 Remove the L_STOP label
- #6185 Added mrb_callinfo::u.keep_context for clarity
- #6186 Omit NULL check of e->cxt in OP_RETURN_BLK
- #6191 Speed up symbol equality comparison
- #6192 Fix
OP_STOP with exception
- #6193 Fix wrong assertion in
OP_SENDB.
- #6194 Simplify the calculation of the number of closures in
MRB_TT_FIBER
- #6197 Fix int_xor to call flo_xor.
- #6201 tasks/doc.rake: standardize the
rake doc error messages
- #6202 Remove the
.yardoc folder with rake doc:clean:api
- #6204 Clean up the
.editorconfig file
- #6209 Minor
.gitignore clean up
- #6211 Minor
.gitignore clean up; order entries
- #6216 Shared empty
iv_tbl of module
- #6217 Strict declaration for
mrb_istruct_size()
- #6219 Avoid assigning a fixed value in the loop
- #6220 Reorganize
mrb_cache_entry and mrb_method_t types
- #6221 Arranging
each_backtrace()
- #6222 Need to synchronize
dbg->regs after VM call in mrdb
- #6224
mrb_env_unshare() to break the link to fiber
- #6225 Revert "Adjust environment when `mrb_exec_irep` happened."
- #6227 fix:
Array#shuffle(!) result distribution
- #6228 Revert "`env` referred from top-level callinfo should not be unshared; fix #4019"
- #6230 Fix status of fiber after switched by exception raised
- #6231 Add a way to let other gems handle closing of fds in mruby-io
- #6232 Fold the code for freeing
env
- #6233 Free stack memory at end of fiber
- #6235 fix
Array#delete always firing the block when deleting nil
- #6236 unify the code for filter methods (and speed up
#reject!)
- #6237 Stricter env objects to attach to ci
- #6238 Minimize zero initialization of the stack
- #6243 Fixed base64 decoding in
mruby-pack
- #6244 Revise scope of role of
mrb_vm_run()
- #6246 Fix typo in
test/t/hash.rb
- #6249 Fix spelling in
src/vm.c
- #6250 Fix spelling
- #6251 Clean up root move
CODEOWNERS to .github directory
- #6253 Allow recycling fibers by GC if not referenced directly
- #6256 Update documentation for
mrb_top_run()
- #6257 fix some mrbconf.md typos
- #6260 Remove
exc_caught from mrb_vm_exec()
- #6261 fix:
to_a integer ranges with begin > end failing
- #6263 fix:
Array#delete mistakenly calling block even if not passed
- #6264 Must pass keyword arguments for
Kernel#to_enum
- #6265 Fixes
Dir.children and Dir.each_child
- #6266 Passes the nonexistent key as a block argument in
Array#delete
- #6273 Improvements to
mrb_protect_atexit()
- #6275 Fixed
Binding#eval that failed to assign to the same variable
- #6276 Always run
atexit on the top-level call frame
- #6279 Include headers for malloc() explicitly; fix #6277
- #6280 Remove
MRB_ENV_CLOSED flag
- #6281 Fixes local variables in
mruby-binding.
- #6283 Simplify
uvenv()
- #6288 Detach
env of ci explicitly on atexit
- #6289 Simplify
OP_RETURN_BLK and OP_BREAK
- #6290 Allow to change the output directory name of the
libmruby file
- #6293 Changed the instruction table in
opcode.md
- #6294 Optimise
mrb_iv_get
- #6302 Minor cleanup in mrb_str_init
- #6303 mrb_str_aset_m() should return replace instead of str
- #6305 Protect keyword arguments in
prepare_missing()
- #6308 Assume that
MRB_CATCH() has mrb->exc set
- #6310 Doubling the call stack when extending it
- #6311 Added fast-path for positional arguments less than 15 in
OP_SEND
- #6312 Omit error checking at
OP_RETURN, OP_RETURN_BLK and OP_BREAK
- #6313 Fix wrong column number in opcode.md
- #6314 Optimize even?/odd? for big integers
- #6318 Shrink variables in
mrb_vm_exec()
- #6320 Shrinking the code in
OP_BREAK and OP_RETURN_BLK
- #6321 Avoid warnings in
lib/**/*.rb
- #6322 Fix mrb_ro_data_p on Intel Mac
- #6324 Remove
localjump_error()
- #6327 fix ncurses linking issues
- #6328 Fix use-after-free in
obj_free() for env objects
- #6329 Fix use-after-free in
mrb_obj_alloc()
- #6330 Add a precondition to call
mrb_env_unshare().
- #6331 Restore the GC arena with tests
- #6332 Must not depend on the “host” build to generate
mruby-compiler/core/y.tab.c
- #6333 Reduce the number of branch instructions in the
heap_p()
- #6335 Add
return_ci in CHECKPOINT_MAIN() of OP_RETURN
- #6338 Need to place static proc objects into 8-byte alignments
- #6340 Fix use-after-free for
Array#<=>
- #6341 Need to restore the GC arena after some function calls
- #6344 prefer using
mrb_yield to call block arguments
- #6347 codegen.c,parse.y: remove flattening of
yield arguments; fix #6346
- #6348 Cancel the warning disablement
- #6349 Perform GC before deleting directories
- #6350 Fixed character encoding conversion function mismatch
- #6351 Remove unnecessary
mrb_gc_arena_restore()
- #6353 Fix use-after-free in
mrb_ary_delete()
- #6356 Making splat argument objects invisible from Ruby side
- #6373 Add build config for Milk-V Duo (RISC-V Linux) board
- #6382 Make array objects invisible in
mrb_gc_register()
- #6385 Small improvements for
mrb_gc_register()
- #6386 Avoid calling
mrb_gv_set() from mrb_gc_unregister()
- #6387 Small improvements for
mrb_gc_unregister()
- #6390 Fix use-after-free by
mrb_gc_unregistor()
- #6391 Fixed argument forwarding in
instance_exec
- #6392 Fix argument forwarding in
mrb_exec_irep()
- #6393 Follow-up to #6391
- #6395 Storing method-id inside Symbol#to_proc
- #6396 Milk-V Build Config: update GPIO gem URL
- #6397 boxing_no.h: rename BOXNIX_SET_VALUE -> BOXNO_SET_VALUE
- #6399 Add macOS 15 to the build
- #6405
io_read: use i instead of d in call to mrb_raisef
- #6407 Allow to exclude specific files in
rake install
- #6408 Improve compliance with C++ standards
- #6410 Put
#include <stdlib.h> in parse.y
- #6412 Distinguish the call frame of the generator with
OP_RETURN_BLK
- #6413 Add links to documentation in
README.md
- #6415 Fix numbered parameters when used as a singleton
- #6416 Optimize the "new" method's iseq
- #6419 Follow Ruby's behavior for numbered parameters in -> {}
- #6420 Update
labeler.yml: add label for the tools directory
- #6422 Add annotations for function names defined in the preprocessor
- #6423 Adding a serialized test task
- #6427 Need to update
ci variable after re-entry to VM
- #6428 Change the limits of OP_ADDI and OP_SUBI from 0-127 to 0-255.
- #6429 Fix numbered parameters when used as hash keys
- #6432 Moving code in macro arguments out of macros
- #6434 Added document "Layout of the mruby filesystem"
- #6436 Make
rake doc:update-index prettier friendly
- #6437 Add more details to the pre-commit config
- #6438 Remove unused
MRuby::Build#list_install_excludes method
- #6440 Fix
redo keyword
- #6442 Fixed wrong range condition in
OP_JMPUW
- #6443 Fix NODE_NEGATE for bigints
- #6444 Add test cases for bigints
- #6446 Omit the
_WIN64 definition check
- #6447 Fixed
File.expand_path
- #6448 Suppress presym in
mruby/ext/io.h file
- #6449 Using presym in the
mruby-io/src/file_test.c file
- #6450 Change
MRB_WITH_IO_PREAD_PWRITE configuration name
- #6454 mruby-bigint: handle rhs bigint in int_mod and int_divmod functions
- #6455 mruby-bigint: fix rounding behavior in mpz_mdiv and mpz_mdivmod functions
- #6457 bigint: fix bug with division of a small number by a bigint
- #6459
FileTest is a module
- #6461 To create a release package file in draft
- #6462 Properly cast the return value of
memchr()
- #6463 Add
level argument to File.dirname
- #6465 Add initial PlayStation portable crossbuild support
- #6468 Fixed missing changes to
IB_FIND_BY_KEY() parameter names
- #6469 Add more
const qualifier for RProc
- #6472 Moved tests for
Integer#quo
- #6473 Hide
mpz_and() symbol
- #6473 Hide mpz_and() symbol
- #6474 Avoid array object creation with “unknown keyword” error
- #6475 Don't include deleted mruby-print
- #6478 Fixed buffer overrun in function
chars2bytes()
- #6479 Reimplementation of
File.expand_path method
- #6482 Add
File.absolute_path? method
- #6487 Add Emscripten toolchain & build_config